package com.inei.cie.capituloi;

import java.util.ArrayList;
import java.util.List;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.Color;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.CompoundButton.OnCheckedChangeListener;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.Spinner;
import android.widget.TableLayout;
import android.widget.TableRow;
import android.widget.TextView;
import android.widget.Toast;

import com.inei.cie.Carga_Trabajo_Activity;
import com.inei.cie.R;
import com.inei.cie.capituloix.CapituloIX_Activity;
import com.inei.cie.caratula.Caratula_DEF_Activity;
import com.inei.cie.dao.CapituloIDao;
import com.inei.cie.dao.CaratulaDao;
import com.inei.cie.entidades.P1_A;
import com.inei.cie.entidades.P1_A_2N;
import com.inei.cie.entidades.P1_B;
import com.inei.cie.entidades.P1_B_2A_N;
import com.inei.cie.entidades.PCar;
import com.inei.cie.utilitarios.Variables;

public class CapituloI_Activity extends Activity {

	public Variables var;
	public CapituloIDao capitulo;
	public String id_local;
	public int Nro_Pred;
	public Bundle b;
	public int c_pred, c_ie;
	public P1_A p1_a;
	public P1_B p1_b;
	public List<P1_B_2A_N> lP1_b_2a_n;
	public int Predios;

	public TextView tvLocal;
	public TableLayout tlCapitulo1;
	public List<CheckBox> lPredNoCol;
	public EditText et1A1, et1B1, etOBS;
	public Spinner sp1B2;
	public LinearLayout llPredios, ll1B;
	public TableRow tr1B2A, tr1B2, tr1B1;
	public int rural;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.capitulo_i);
		IniciarComponentes();
	}

	public void IniciarComponentes() {
		var = new Variables();
		capitulo = new CapituloIDao(this);
		b = getIntent().getExtras();
		id_local = b.getString(var.ID_LOCAL);
		Nro_Pred = b.getInt(var.NRO_PRED);
		rural = b.getInt("rural");

		tvLocal = (TextView) findViewById(R.id.tvLocal);
		tvLocal.setText("Local Nro. " + id_local);

		tlCapitulo1 = (TableLayout) findViewById(R.id.tlCapitulo1);

		et1A1 = (EditText) findViewById(R.id.et1A1);
		et1A1.addTextChangedListener(new TextWatcher() {

			@Override
			public void onTextChanged(CharSequence s, int start, int before,
					int count) {

				if (!s.toString().equals("")) {
					if (Integer.parseInt(s.toString()) > 30) {
						et1A1.setText("");
						Toast.makeText(
								CapituloI_Activity.this,
								"El n\u00famero de instituciones educativas no debe ser mayor a 30",
								Toast.LENGTH_LONG).show();
						et1A1.requestFocus();
					}
				}
			}

			@Override
			public void beforeTextChanged(CharSequence s, int start, int count,
					int after) {
			}

			@Override
			public void afterTextChanged(Editable s) {
			}
		});

		et1B1 = (EditText) findViewById(R.id.et1B1);
		et1B1.addTextChangedListener(new TextWatcher() {

			@Override
			public void onTextChanged(CharSequence s, int start, int before,
					int count) {

				if (s.length() == 0 || s.toString().equals("1")
						|| Integer.parseInt(s.toString()) == 1
						|| Integer.parseInt(s.toString()) == 0) {

					sp1B2.setSelection(0);
					sp1B2.setEnabled(false);
					tr1B2.setVisibility(View.GONE);
					llPredios.removeAllViews();
					lPredNoCol = null;
					tr1B2A.setVisibility(View.GONE);
					if (!s.toString().trim().equals("")) {
						int pos = Integer.parseInt(s.toString());
						if (pos == 1) {
							lP1_b_2a_n = capitulo.ObtenerSeccionB_2N(id_local);
							if (lP1_b_2a_n == null) {
								lP1_b_2a_n = new ArrayList<P1_B_2A_N>();
							}
							if (lP1_b_2a_n.size() != 0) {
								P1_B_2A_N obj = lP1_b_2a_n.get(0);
								lP1_b_2a_n = new ArrayList<P1_B_2A_N>();
								lP1_b_2a_n.add(obj);
							} else {
								P1_B_2A_N obj = new P1_B_2A_N();
								obj.setId_local(id_local);
								obj.setNro_Pred(1);
								obj.setP1_B_2A_PredNoCol(0);
								lP1_b_2a_n.add(obj);
							}
						}
					}
				} else {
					tr1B2.setVisibility(View.VISIBLE);
					sp1B2.setEnabled(true);

				}
			}

			@Override
			public void beforeTextChanged(CharSequence s, int start, int count,
					int after) {
			}

			@Override
			public void afterTextChanged(Editable s) {
			}
		});

		sp1B2 = (Spinner) findViewById(R.id.sp1B2);
		sp1B2.setOnItemSelectedListener(new OnItemSelectedListener() {

			@Override
			public void onItemSelected(AdapterView<?> adapter, View v, int pos,
					long arg3) {
				if (pos == 2) {
					tr1B2A.setVisibility(View.VISIBLE);
					int cant = Integer.parseInt(et1B1.getText().toString());
					lPredNoCol = new ArrayList<CheckBox>();
					if (lP1_b_2a_n == null) {
						lP1_b_2a_n = new ArrayList<P1_B_2A_N>();
						for (int i = 0; i < cant; i++) {
							P1_B_2A_N obj = new P1_B_2A_N();
							obj.setId_local(id_local);
							obj.setNro_Pred(i + 1);
							lP1_b_2a_n.add(obj);
						}
					} else if (lP1_b_2a_n.size() != cant) {
						lP1_b_2a_n = new ArrayList<P1_B_2A_N>();
						for (int i = 0; i < cant; i++) {
							P1_B_2A_N obj = new P1_B_2A_N();
							obj.setId_local(id_local);
							obj.setNro_Pred(i + 1);
							lP1_b_2a_n.add(obj);
						}
					}
					for (int i = 0; i < cant - 1; i++) {
						AgregarCheckBox((i + 2) + "");
					}
				} else if (pos == 1) {
					llPredios.removeAllViews();
					lPredNoCol = null;
					tr1B2A.setVisibility(View.GONE);
					if (lP1_b_2a_n != null) {
						lP1_b_2a_n = capitulo.ObtenerSeccionB_2N(id_local);
						if (lP1_b_2a_n == null) {
							lP1_b_2a_n = new ArrayList<P1_B_2A_N>();
						}
						int CantBD = lP1_b_2a_n.size();
						int Cant = Integer.parseInt(et1B1.getText().toString());
						if (CantBD == 0) {
							for (int i = 0; i < Cant; i++) {
								P1_B_2A_N obj = new P1_B_2A_N();
								obj.setId_local(id_local);
								obj.setNro_Pred(i + 1);
								obj.setP1_B_2A_PredNoCol(0);
								lP1_b_2a_n.add(obj);
							}
						} else if (Cant == CantBD) {
							for (int i = 0; i < lP1_b_2a_n.size(); i++) {
								lP1_b_2a_n.get(i).setP1_B_2A_PredNoCol(0);
							}
						} else if (Cant > CantBD) {
							for (int i = 0; i < lP1_b_2a_n.size(); i++) {
								lP1_b_2a_n.get(i).setP1_B_2A_PredNoCol(0);
							}
							for (int i = lP1_b_2a_n.size(); i < Cant; i++) {
								P1_B_2A_N obj = new P1_B_2A_N();
								obj.setId_local(id_local);
								obj.setNro_Pred(i + 1);
								obj.setP1_B_2A_PredNoCol(0);
								lP1_b_2a_n.add(obj);
							}
						} else if (Cant < CantBD) {
							List<P1_B_2A_N> lista = new ArrayList<P1_B_2A_N>();
							for (int i = 0; i < Cant; i++) {
								lista.add(lP1_b_2a_n.get(i));
							}
							lP1_b_2a_n = lista;
						}
					}
				} else if (pos == 0) {
					lP1_b_2a_n = capitulo.ObtenerSeccionB_2N(id_local);
					if (lP1_b_2a_n == null) {
						lP1_b_2a_n = new ArrayList<P1_B_2A_N>();
					}
					if (lP1_b_2a_n.size() != 0) {
						P1_B_2A_N obj = lP1_b_2a_n.get(0);
						lP1_b_2a_n = new ArrayList<P1_B_2A_N>();
						lP1_b_2a_n.add(obj);
					} else {
						P1_B_2A_N obj = new P1_B_2A_N();
						obj.setId_local(id_local);
						obj.setNro_Pred(1);
						obj.setP1_B_2A_PredNoCol(0);
						lP1_b_2a_n.add(obj);
					}
				}
			}

			@Override
			public void onNothingSelected(AdapterView<?> arg0) {
			}
		});
		tr1B2 = (TableRow) findViewById(R.id.tr1B2);
		tr1B2A = (TableRow) findViewById(R.id.tr1B2A);

		etOBS = (EditText) findViewById(R.id.etOBS);

		llPredios = (LinearLayout) findViewById(R.id.llPredios);
		sp1B2.setEnabled(false);
		ll1B = (LinearLayout) findViewById(R.id.ll1B);
		tr1B1 = (TableRow) findViewById(R.id.tr1B1);
		if (Nro_Pred != 1) {
			ll1B.setVisibility(View.GONE);
			tr1B1.setVisibility(View.GONE);
			tr1B2.setVisibility(View.GONE);
			tr1B2A.setVisibility(View.GONE);
		}

		CargarData();
	}

	public void CargarData() {
		p1_a = capitulo.ObtenerSeccionA(id_local, Nro_Pred);
		if (p1_a != null) {
			et1A1.setText(p1_a.getP1_A_1_Cant_IE() < 10 ? "0"
					+ p1_a.getP1_A_1_Cant_IE() : p1_a.getP1_A_1_Cant_IE() + "");
			if (p1_a.getP1_Obs() != null) {
				etOBS.setText(p1_a.getP1_Obs());
			}
		} else {
			p1_a = new P1_A();
			p1_a.setId_local(id_local);
			p1_a.setPC_F_1(Nro_Pred);
		}

		if (Nro_Pred == 1) {

			lP1_b_2a_n = capitulo.ObtenerSeccionB_2N(id_local);

			p1_b = capitulo.ObtenerSeccionB(id_local);
			if (p1_b != null) {

				Predios = p1_b.getP1_B_1_TPred();
				et1B1.setText(p1_b.getP1_B_1_TPred() < 10 ? "0"
						+ p1_b.getP1_B_1_TPred() : p1_b.getP1_B_1_TPred() + "");
				if (p1_b.getP1_B_1_TPred() != 0) {
					if (p1_b.getP1_B_1_TPred() == 1) {
						p1_b.setP1_B_2_PredCol(0);
						sp1B2.setSelection(p1_b.getP1_B_2_PredCol());
					} else {
						sp1B2.setSelection(p1_b.getP1_B_2_PredCol());
					}
				}
			} else {
				p1_b = new P1_B();
				Predios = 0;
				p1_b.setId_local(id_local);
			}
		}

	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		if (rural == 1) {
			getMenuInflater().inflate(R.menu.menu_capituloi_rural, menu);
		} else {
			if (Nro_Pred != 1) {
				getMenuInflater().inflate(R.menu.menu_capituloi, menu);
				menu.removeItem(R.id.cap1b);
				menu.removeItem(R.id.cap1c);
			} else {
				getMenuInflater().inflate(R.menu.menu_capituloi, menu);
			}
		}

		return super.onCreateOptionsMenu(menu);
	}

	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		switch (item.getItemId()) {
		case R.id.mnSalir:
			AlertDialog.Builder dialogo1 = new AlertDialog.Builder(this);
			dialogo1.setTitle("Importante");
			dialogo1.setMessage("Deseas Salir?");
			dialogo1.setIcon(android.R.drawable.ic_dialog_alert);
			dialogo1.setCancelable(false);
			dialogo1.setPositiveButton("Si",
					new DialogInterface.OnClickListener() {
						public void onClick(DialogInterface dialogo1, int id) {
							finish();
						}
					});

			dialogo1.setNegativeButton("No",
					new DialogInterface.OnClickListener() {
						public void onClick(DialogInterface dialogo1, int id) {
							return;
						}
					});
			dialogo1.show();
			break;
		case R.id.mnGuardar:
			if (GuardarData()) {
				Mensaje("Los datos fueron guardados con \u00e9xito");
			}
			break;
		case R.id.cap1a:
			if (GuardarData()) {
				Intent irCap1a = new Intent(this,
						CapituloI_SeccionA_Lista_Instituciones_Activity.class);
				irCap1a.putExtras(b);
				startActivity(irCap1a);
				finish();
				Mensaje("Los datos fueron guardados con \u00e9xito");
			}
			break;

		case R.id.cap1b:
			if (GuardarData()) {
				Intent irCap1b = new Intent(this,
						CapituloI_SeccionB_Lista_Predios_Activity.class);
				irCap1b.putExtras(b);
				startActivity(irCap1b);
				finish();
				Mensaje("Los datos fueron guardados con \u00e9xito");
			}
			break;
		case R.id.cap1c:
			if (GuardarData()) {
				if (capitulo.ContarAnexosC(id_local, Nro_Pred) == 0) {
					Toast.makeText(this, "No hay anexos registrados",
							Toast.LENGTH_SHORT).show();
				} else {
					Intent irAnexos = new Intent(this,
							CapituloI_SeccionC_Lista_Anexos_Activity.class);
					irAnexos.putExtras(b);
					startActivity(irAnexos);
					finish();
					Mensaje("Los datos fueron guardados con \u00e9xito");
				}

			}
			break;
		case R.id.mnFoto:
			Intent foto = new Intent(CapituloI_Activity.this,
					CapituloIX_Activity.class);
			b.putBoolean("pregunta", true);
			foto.putExtras(b);
			startActivity(foto);
			break;
		default:
			break;
		}
		return super.onOptionsItemSelected(item);
	}

	public boolean GuardarData() {
		c_ie = (et1A1.getText().toString().equals("") ? 0 : Integer
				.parseInt(et1A1.getText().toString()));
		c_pred = (et1B1.getText().toString().equals("") ? 0 : Integer
				.parseInt(et1B1.getText().toString()));

		if (et1A1.getText().toString().equals("")) {
			et1A1.requestFocus();
			Mensaje("Debe ingresar la cantidad de Instituciones Educativas");
		} else if (c_ie == 0) {
			et1A1.requestFocus();
			Mensaje("La cantidad de Instituciones Educativas debe ser mayor a 0");
		} else if (et1B1.getText().toString().equals("") && Nro_Pred == 1) {
			et1B1.requestFocus();
			Mensaje("Debe ingresar la cantidad de Predios");
		} else if (c_pred == 0 && Nro_Pred == 1) {
			et1B1.requestFocus();
			Mensaje("La cantidad de Predios debe ser mayor a 0");
		} else if (c_pred != 1 && sp1B2.getSelectedItemPosition() == 0
				&& Nro_Pred == 1) {
			sp1B2.requestFocus();
			Mensaje("Indique si los predios son colindantes o no");
		} else if (c_pred != 1 && sp1B2.getSelectedItemPosition() == 2
				&& NoColindante() == 0 && Nro_Pred == 1) {
			sp1B2.requestFocus();
			Mensaje("Debe indicar por lo menos un predio No colindante");
		} else if (Predios > c_pred && Nro_Pred == 1) {
			et1B1.requestFocus();
			Mensaje("La cantidad de predios ingresada debe ser mayor o igual a la antes registrada");
		} else {
			p1_a.setP1_A_1_Cant_IE(c_ie);
			p1_a.setP1_Obs(etOBS.getText().toString());
			p1_a.setSwCompleto(1);
			if (Nro_Pred == 1) {
				p1_b.setP1_B_1_TPred(c_pred);
				p1_b.setP1_B_2_PredCol(sp1B2.getSelectedItemPosition());
				p1_b.setSwCompleto(1);
				if (lP1_b_2a_n == null) {
					lP1_b_2a_n = new ArrayList<P1_B_2A_N>();
					for (int i = 0; i < c_pred; i++) {
						P1_B_2A_N obj = new P1_B_2A_N();
						obj.setId_local(id_local);
						obj.setNro_Pred(i + 1);
						obj.setP1_B_2A_PredNoCol(0);
						lP1_b_2a_n.add(obj);
					}
				}

				List<P1_A_2N> listaInstituciones = capitulo.ObtenerListadoIE(
						id_local, Nro_Pred);

				if (listaInstituciones == null) {
					if (capitulo.GuardarSeccionAB(p1_a, p1_b, lP1_b_2a_n)) {
						b.putInt(var.CANT_IE, c_ie);
						b.putInt(var.CANT_PREDIOS, c_pred);
						if (rural == 1) {
							CaratulaDao c = new CaratulaDao(this);
							PCar pcar = c.ObtenerCaratula(id_local, Nro_Pred);
							if (pcar.getSwCompleto() == -1) {
								pcar.setSwCompleto(0);
							}
							c.GuardarCaratula(pcar);
						}
					} else {
						Mensaje("No se pudo guardar los datos ingresados");
						return false;
					}
				} else {
					if (listaInstituciones.size() <= p1_a.getP1_A_1_Cant_IE()) {
						if (capitulo.GuardarSeccionAB(p1_a, p1_b, lP1_b_2a_n)) {
							b.putInt(var.CANT_IE, c_ie);
							b.putInt(var.CANT_PREDIOS, c_pred);
							if (rural == 1) {
								CaratulaDao c = new CaratulaDao(this);
								PCar pcar = c.ObtenerCaratula(id_local,
										Nro_Pred);
								if (pcar.getSwCompleto() == -1) {
									pcar.setSwCompleto(0);
								}
								c.GuardarCaratula(pcar);
							}
						} else {
							Mensaje("No se pudo guardar los datos ingresados");
							return false;
						}
					} else {
						Mensaje("No puede ingresar una cantidad menor de Instituciones");
						return false;
					}
				}
			} else {
				try {
					List<P1_A_2N> listaInstituciones = capitulo
							.ObtenerListadoIE(id_local, Nro_Pred);

					if (listaInstituciones == null) {
						capitulo.GuardarSeccionA(p1_a);
					} else {
						if (listaInstituciones.size() <= p1_a
								.getP1_A_1_Cant_IE()) {

							capitulo.GuardarSeccionA(p1_a);

						} else {
							Mensaje("No puede ingresar una cantidad menor de Instituciones");
							return false;
						}
					}
				} catch (Exception e) {
					Mensaje("No se pudo guardar los datos ingresados");
					return false;
				}
				b.putInt(var.CANT_IE, c_ie);
			}
			return true;
		}
		return false;
	}

	public int NoColindante() {
		if (lP1_b_2a_n == null) {
			return 1;
		} else {
			for (P1_B_2A_N obj : lP1_b_2a_n) {
				if (obj.getP1_B_2A_PredNoCol() == 1) {
					return 1;
				}
			}
		}
		return 0;
	}

	public void AgregarCheckBox(String txt) {
		CheckBox cb = new CheckBox(this);
		cb.setText(txt.length() == 1 ? "0" + txt : txt);
		cb.setTextSize(16);
		cb.setTextColor(Color.BLACK);
		lPredNoCol.add(cb);
		final int pos = lPredNoCol.indexOf(cb);

		if (lP1_b_2a_n != null) {
			if (lP1_b_2a_n.size() != 1) {
				cb.setChecked(lP1_b_2a_n.get(pos + 1).getP1_B_2A_PredNoCol() == 1 ? true
						: false);
			}
		}
		cb.setOnCheckedChangeListener(new OnCheckedChangeListener() {

			@Override
			public void onCheckedChanged(CompoundButton buttonView,
					boolean isChecked) {
				lP1_b_2a_n.get(pos + 1).setP1_B_2A_PredNoCol(
						(isChecked) ? 1 : 0);
			}
		});
		llPredios.addView(cb);

	}

	public void Mensaje(String msj) {
		Toast.makeText(this, msj, Toast.LENGTH_LONG).show();
	}

	@Override
	public void onBackPressed() {
		if (rural == 1) {
			Intent anterior = new Intent(this, Carga_Trabajo_Activity.class);
			anterior.putExtras(b);
			startActivity(anterior);
			finish();
		} else {
			if (Nro_Pred != 1) {
				Intent anterior = new Intent(this,
						CapituloI_Capitulos_Activity.class);
				anterior.putExtras(b);
				startActivity(anterior);
				finish();
			} else {
				Intent anterior = new Intent(this, Caratula_DEF_Activity.class);
				anterior.putExtras(b);
				startActivity(anterior);
				finish();
			}
		}

	}
}
